package com.wcs.exam.dao.impl.mapper.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

/**
 * <p>
 * 考试
 * </p>
 *
 * @author wcs
 * @since 2025-03-13
 */
@Getter
@Setter
@Accessors(chain = true)
@TableName("exam")
public class Exam implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 考试类型(1：模拟考试、2：正式考试)
     */
    private Integer examType;

    /**
     * 考试名称
     */
    private String examName;

    /**
     * 分类ID
     */
    private Long categoryId;

    /**
     * 试卷ID
     */
    private Long paperId;

    /**
     * 考试说明
     */
    private String description;

    /**
     * 模拟考试-有效期类型(1：长期有效、2：有效天数、3：固定周期)
     */
    private Integer validityDateType;

    /**
     * 模拟考试-开始时间
     */
    private LocalDateTime beginTime;

    /**
     * 模拟考试-结束时间
     */
    private LocalDateTime endTime;

    /**
     * 模拟考试-有效天数
     */
    private Integer days;

    /**
     * 销售价(单位：元，0表示免费)
     */
    private BigDecimal price;

    /**
     * 划线价(单位：元，0表示免费)
     */
    private BigDecimal linePrice;

    /**
     * 作答时长(单位：分钟)
     */
    private Integer answerTime;

    /**
     * 模拟考试-考试次数(单位：次，0表示无限次)
     */
    private Integer examCount;

    /**
     * 及格百分比(取值范围：1~100)
     */
    private Integer passPercentage;

    /**
     * 人脸识别(0：关闭、1：开启)
     */
    private Boolean faceId;

    /**
     * 切屏限制(0：关闭、1：开启)
     */
    private Boolean switchScreenLimit;

    /**
     * 切屏限制次数
     */
    private Integer switchScreenCount;

    /**
     * 切屏判断时间(单位：秒)
     */
    private Integer switchScreenTime;

    /**
     * 评阅方式(1:系统评阅，2:人工评阅)
     */
    private Integer evaluationMethod;

    /**
     * AI评阅(false：关闭、true：开启)
     */
    private Boolean aiGrading;

    /**
     * 考试成绩设置(1：记录学员最高成绩、2：记录学员最新成绩)
     */
    private Integer examScoreType;

    /**
     * 成绩显示(0：禁止、1：显示)
     */
    private Boolean resultShow;

    /**
     * 成绩展示规则(1：交卷后、2：考试结束后、3：自定义)-只能查看评阅完成的记录
     */
    private Integer resultShowRule;

    /**
     * 成绩展示时间
     */
    private LocalDateTime resultShowTime;

    /**
     * 作答内容展示(0：禁止、1：显示)-开启成绩显示才能开启
     */
    private Boolean answerShow;

    /**
     * 作答内容展示规则(1：查看对错和答案解析、2：只看对错)-只能查看评阅完成的记录
     */
    private Integer answerShowRule;

    /**
     * 结果显示名次(0：禁止、1：显示)-开启成绩显示才能开启
     */
    private Boolean resultShowRank;

    /**
     * 排行榜(0：禁止、1：显示)
     */
    private Boolean rankList;

    /**
     * 正式考试-报名开始时间
     */
    private LocalDateTime registrationStartTime;

    /**
     * 正式考试-报名结束时间
     */
    private LocalDateTime registrationEndTime;

    /**
     * 正式考试-报名人数限制(0表示不限人数)
     */
    private Integer registrationUserLimitCount;

    /**
     * 正式考试-考试开始时间
     */
    private LocalDateTime examStartTime;

    /**
     * 正式考试-考试结束时间
     */
    private LocalDateTime examEndTime;

    /**
     * 正式考试-允许迟到(0：禁止、1：允许)
     */
    private Boolean allowableLate;

    /**
     * 正式考试-允许迟到时间(单位：分钟)
     */
    private Integer allowableLateTime;

    /**
     * 正式考试-考试开考前人脸识别限制时间(单位：分钟)
     */
    private Integer faceIdLimitTime;

    /**
     * 正式考试-考试开考前人脸识别允许错误次数(单位：次)
     */
    private Integer faceIdLimitCount;

    /**
     * 正式考试-考试开考前人脸识别失败允许考试(0：禁止、1：允许)
     */
    private Boolean faceIdFailureEnter;

    /**
     * 正式考试-考试开考前人脸识别失败允许申诉(0：禁止、1：允许)
     */
    private Boolean faceIdFailureAppeal;

    /**
     * 人脸抓拍(0：关闭、1：开启)
     */
    private Boolean faceCapture;

    /**
     * 人脸抓拍时间(单位：分钟)
     */
    private Integer faceCaptureTime;

    /**
     * 人脸抓拍检测(与开考前人脸识别结果进行对比)
     */
    private Boolean faceCaptureDetection;

    /**
     * 人脸抓拍高灵敏度检测(在考试过程中，以固定频率（例如3秒/次）监测学员摄像头中是否存在人脸或多张人脸)
     */
    private Boolean faceCaptureHighDetection;

    /**
     * 人脸抓拍检测错误限制次数
     */
    private Integer faceCaptureFailureCount;

    /**
     * 正式考试-开考前通知
     */
    private Boolean noticeBefore;

    /**
     * 正式考试-成绩公布通知
     */
    private Boolean noticePublishedScore;

    /**
     * 学习统计
     */
    private Integer countStudy;

    /**
     * 虚拟学习人数(页面显示的人数=学习人数+虚拟人数)
     */
    private Integer countVirtualStudy;

    /**
     * 购买统计
     */
    private Integer countBuy;

    /**
     * 虚拟购买人数(页面显示的人数=购买人数+虚拟人数)
     */
    private Integer countVirtualBuy;

    /**
     * 发布状态(0：未发布，1：已发布)
     */
    private Integer publishStatus;

    /**
     * 状态
     */
    private Integer status;

    /**
     * 排序
     */
    private Integer sort;

    /**
     * 创建时间
     */
    private LocalDateTime gmtCreate;

    /**
     * 修改时间
     */
    private LocalDateTime gmtModified;
}
